//1.let定义的变量不在window对象上
let a = 5 
console.log(window.a) //undefined

//2.let定义的变量不允许重复声明
// let a = 9  //告知a已经被定义，词法阶段就会报错

//3.let定义的变量不存在变量提升
console.log(b) //b未定义
let b = 8

//4.let具有暂时性死区
var c = 9 
if(true){
    console.log(c) //c在本作用域已经查找到，这时候就不会再向外查找，从而形成一个暂时性死区
    let c = 8
}
//5.let定义的变量具有块级作用域
for(var i = 0 ;i < 3;i++){
    setTimeout(function(){
        console.log(i)  //3 3 3 
    },0)
}

//解决方法：1.立即执行函数（闭包）
for(var i = 0 ;i < 3;i++){
    (function(j){
        setTimeout(function(){
            console.log(j)  //0 1 2 
        },0)
    })(i)   
}
//解决方法：2.将var换成let
for(let i = 0 ;i < 3;i++){
    setTimeout(function(){
        console.log(i)  //0 1 2
    },0)
}

